<?php
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/util/database.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/dto/bitacoras_dto.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/dto/usuario_dto.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/dto/oferta_dto.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/email/email_distribution_list.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/email/sent_email.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/templates/temp_notificacion_nuevo_empleador.php");

class AspiranteDTO {
	public function __construct() {
		exit ( 'Init function is not allowed' );
	}
	
	public static function getPerfilesAspiranteAdmon($carrera, $nivelAcademico) {
		$con = Database::connect ();
	
		error_log ( 'Valor de los filtros para la busqueda de perfiles de aspirante $carrera: ' . $carrera . ' nivelAcademic: ' . $nivelAcademico );
		$queryPart1 = "select asp.id_aspirante , asp.nombres, asp.apellidos, asp.cum, asp.url_cv, asp.estado,
							 carr.nombre_carrera, niv.descripcion as nombre_nivel_academico
					from
						tbl_aspirante as asp,
						tbl_carrera as carr,
						tbl_nivel_academico as niv
					where ";
	
		$queryPart2 = ' ';
		if ($carrera > 0) {
			$queryPart2 = $queryPart2 . ' carr.id_carrera = ' . $carrera . ' and ';
		}
	
		if ($nivelAcademico > 0) {
			$queryPart2 = $queryPart2 . ' niv.id_nivel_academico = ' . $nivelAcademico . ' and ';
		}
	
		$queryPart3 = " carr.id_carrera = asp.id_carrera and
					niv.id_nivel_academico = asp.id_nivel_academico  order by cum desc";
	
		$query = $queryPart1 . $queryPart2 . $queryPart3;
	
		error_log ( ' QUery para busqueda de perfiles: ' . $query, 0 );
		$stmt = $con->prepare ( $query );
		$stmt->execute ();
		Database::disconnect ();
		return $stmt;
	}	
	
	
	public static function getPerfilesAspirante($carrera, $nivelAcademico) {
		$con = Database::connect ();
		
		error_log ( 'Valor de los filtros para la busqueda de perfiles de aspirante $carrera: ' . $carrera . ' nivelAcademic: ' . $nivelAcademico );
		$queryPart1 = "select asp.id_aspirante , asp.nombres, asp.apellidos, asp.cum, asp.url_cv, asp.estado,
							 carr.nombre_carrera, niv.descripcion as nombre_nivel_academico
					from 
						tbl_aspirante as asp, 
						tbl_carrera as carr, 
						tbl_nivel_academico as niv
					where ";
		
		$queryPart2 = ' ';
		if ($carrera > 0) {
			$queryPart2 = $queryPart2 . ' carr.id_carrera = ' . $carrera . ' and ';
		}
		
		if ($nivelAcademico > 0) {
			$queryPart2 = $queryPart2 . ' niv.id_nivel_academico = ' . $nivelAcademico . ' and ';
		}
		
		$queryPart3 = " carr.id_carrera = asp.id_carrera and 
					niv.id_nivel_academico = asp.id_nivel_academico  and asp.estado = 'Activo' order by cum desc";
		
		$query = $queryPart1 . $queryPart2 . $queryPart3;
		
		error_log ( ' QUery para busqueda de perfiles: ' . $query, 0 );
		$stmt = $con->prepare ( $query );
		$stmt->execute ();
		Database::disconnect ();
		return $stmt;
	}
	public static function getAllAspirantes() {
		$con = Database::connect ();
		$query = "SELECT id_aspirante,nombres, apellidos, email, id_carrera, cum,estado FROM tbl_aspirante ORDER BY cum desc";
		$stmt = $con->prepare ( $query );
		$stmt->execute ();
		Database::disconnect ();
		return $stmt;
	}
	public static function insert($idDepartamento, $idMunicipio, $nombres, $apellidos, $email, $genero, $fechaNacimiento, $domicilio, $telCasa, $telOficina, $telCelular, $urlCV, $login, $clave, $carrera, $nivelAcademico, $cum, $responsable) {
		
		// molde query
		$query = "INSERT INTO tbl_aspirante SET tbl_municipio_tbl_departamento_id_departamento = ?, tbl_municipio_id_municipio = ?, nombres = ?, apellidos = ?, email = ?, genero = ?, fecha_nacimiento  = ?, domicilio = ?, tel_casa = ?, tel_celular = ?, tel_oficina = ?, url_cv= ?, login = ?, clave = md5(?), id_carrera = ?, id_nivel_academico = ?, cum = ?, estado = ?";
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
		
		// idDepartamento
		$stmt->bindParam ( 1, $idDepartamento );
		
		// idMunicipio
		$stmt->bindParam ( 2, $idMunicipio );
		
		// Nombres
		$stmt->bindParam ( 3, $nombres );
		
		// Apellidos
		$stmt->bindParam ( 4, $apellidos );
		
		// Email
		$stmt->bindParam ( 5, $email );
		
		// Genero
		$stmt->bindParam ( 6, $genero );
		
		// Fecha Nacimiento
		$stmt->bindParam ( 7, $fechaNacimiento );
		
		// Domicilio
		$stmt->bindParam ( 8, $domicilio );
		
		// Tel Casa
		$stmt->bindParam ( 9, $telCasa );
		
		// Tel Celuar
		$stmt->bindParam ( 10, $telCelular );
		
		// Tel Oficina
		$stmt->bindParam ( 11, $telOficina );
		
		// URL CV
		$url = null;
		$stmt->bindParam ( 12, $url );
		
		// Login
		$stmt->bindParam ( 13, $login );
		
		// Clave
		$stmt->bindParam ( 14, $clave );
		
		// Carrera
		$stmt->bindParam ( 15, $carrera );
		
		// Nivel Academico
		$stmt->bindParam ( 16, $nivelAcademico );
		
		// CUM
		$stmt->bindParam ( 17, $cum );
		
		// estado registro
		$estadoRegistro = "Activo";
		$stmt->bindParam ( 18, $estadoRegistro );
		
		// Execute the query
		if ($stmt->execute ()) {
			error_log ( 'Nuevo Aspirante creado procediendo a registrar en la bitacora', 0 );
			$idAsignado = UsuarioDTO::validateLoginAspirante ( $login, $clave );
			$admin = null;
			BitacoraAspirante::addRegisterBitacoraAspirante ( $admin, $idAsignado, "CREACION", 'Registro de Nuevo Aspirante', $idAsignado, $responsable );
			Database::disconnect ();
			return true;
		} else {
			error_log ( 'No se pudo crear el aspirante', 0 );
			Database::disconnect ();
			return false;
		}
	}
	public static function getAspirante($idAspirante) {
		$pdo = Database::connect ();
		$pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
		$sql = "SELECT * FROM tbl_aspirante where id_aspirante = ?";
		$q = $pdo->prepare ( $sql );
		$q->execute ( array (
				$idAspirante 
		) );
		return $q;
	}
	public static function readAspirante($idAspirante) {
		$pdo = Database::connect ();
		$pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
		$sql = "SELECT asp.* , dep.nombre_departamento, mun.nombre_municipio, car.nombre_carrera,niv.descripcion
				from  tbl_aspirante asp,
				tbl_departamento dep,
				tbl_municipio mun,
				tbl_carrera car,
				tbl_nivel_academico niv
				where  asp.id_aspirante = ? and
				asp.tbl_municipio_tbl_departamento_id_departamento = dep.id_departamento and
				asp.tbl_municipio_id_municipio  = mun.id_municipio and
				asp.id_carrera = car.id_carrera and
				asp.id_nivel_academico = niv.id_nivel_academico";
		$q = $pdo->prepare ( $sql );
		$q->execute ( array (
				$idAspirante 
		) );
		return $q;
	}
	public static function updateBasicAspirante($idDepartamento, $idMunicipio, $nombres, $apellidos, $email, $genero, $fechaNacimiento, $domicilio, $telCasa, $telOficina, $telCelular, $login, $clave, $carrera, $nivelAcademico, $cum, $idAspirante) {
		$query = "update  tbl_aspirante SET tbl_municipio_tbl_departamento_id_departamento = ?, tbl_municipio_id_municipio = ?, nombres = ?, apellidos = ?, email = ?, genero = ?, fecha_nacimiento  = ?, domicilio = ?, tel_casa = ?, tel_celular = ?, tel_oficina = ?, login = ?, id_carrera = ?, id_nivel_academico = ?, cum = ? where id_aspirante=?";
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
		
		// idDepartamento
		$stmt->bindParam ( 1, $idDepartamento );
		
		// idMunicipio
		$stmt->bindParam ( 2, $idMunicipio );
		
		// Nombres
		$stmt->bindParam ( 3, $nombres );
		
		// Apellidos
		$stmt->bindParam ( 4, $apellidos );
		
		// Email
		$stmt->bindParam ( 5, $email );
		
		// Genero
		$stmt->bindParam ( 6, $genero );
		
		// Fecha Nacimiento
		$stmt->bindParam ( 7, $fechaNacimiento );
		
		// Domicilio
		$stmt->bindParam ( 8, $domicilio );
		
		// Tel Casa
		$stmt->bindParam ( 9, $telCasa );
		
		// Tel Celuar
		$stmt->bindParam ( 10, $telCelular );
		
		// Tel Oficina
		$stmt->bindParam ( 11, $telOficina );
		
		// Login
		$stmt->bindParam ( 12, $login );
		
		// Clave
		// $stmt->bindParam(13, $clave);
		
		// Carrera
		$stmt->bindParam ( 13, $carrera );
		
		// Nivel Academico
		$stmt->bindParam ( 14, $nivelAcademico );
		
		// CUM
		$stmt->bindParam ( 15, $cum );
		
		// idAspirante
		$stmt->bindParam ( 16, $idAspirante );
		
		// Execute the query
		if ($stmt->execute ()) {
			return true;
		} else {
			
			return false;
		}
		
		Database::disconnect ();
	}
	public static function desactivarAspirante($idAspirante, $responsableAdmOpe, $responsableAspOpe, $comentario) {
		$query = "UPDATE  tbl_aspirante set estado = ? where id_aspirante = ? ";
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
		
		$estadoAspirante = "Inactivo";
		$stmt->bindParam ( 1, $estadoAspirante );
		$stmt->bindParam ( 2, $idAspirante );
		$responsable = null;
		if (is_null ( $responsableAdmOpe )) {
			$responsable = 'asp';
		} else {
			$responsable = 'adm';
		}
		
		// Execute the query
		if ($stmt->execute ()) {
			// Escribimos tambien en la bitacora
			BitacoraAspirante::addRegisterBitacoraAspirante ( $responsableAdmOpe, $responsableAspOpe, "DESACTIVACION", $comentario, $idAspirante, $responsable );
			// Enviamos correo al aspirante
			$q = self::getEmail($idAspirante);
			$data = $q->fetch(PDO::FETCH_ASSOC);
			$emailAspirante = $data['email'];
			$emailAspiranteArray = array();
			array_push($emailAspiranteArray, $emailAspirante);
			
			
			$greeting = "Estimado Aspirante: " ;
			$message =  " \n  Lamentamos informarle que tu cuenta de acceso ha sido desactivada ";
			$subject = " SITRABS -Baja de Cuenta  ";
			$resEnvioToEmpleador = sentEmail ( $greeting, $message, $subject, $emailAspiranteArray );
			Database::disconnect ();
			return true;
		}
		
		
	}
	
	public static function getEmail($idAspirante){
		$pdo = Database::connect();
		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$sql = "select email from tbl_aspirante where id_aspirante = ?";
		$q = $pdo->prepare($sql);
		$q->execute(array($idAspirante));
		return $q;
	}
	
	
	
	public static function activarAspirante($idAspirante, $responsableAdmOpe, $responsableAspOpe, $comentario) {
		$query = "UPDATE  tbl_aspirante set estado = ? where id_aspirante = ? ";
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
	
		$estadoAspirante = "Activo";
		$stmt->bindParam ( 1, $estadoAspirante );
		$stmt->bindParam ( 2, $idAspirante );
		$responsable = null;
		if (is_null ( $responsableAdmOpe )) {
			$responsable = 'asp';
		} else {
			$responsable = 'adm';
		}
	
		// Execute the query
		if ($stmt->execute ()) {
			// Escribimos tambien en la bitacora
			BitacoraAspirante::addRegisterBitacoraAspirante ( $responsableAdmOpe, $responsableAspOpe, "ACTIVACION", $comentario, $idAspirante, $responsable );
			$admonEmail = EmailDistributionList::getEmailAdministradores ();
			
			// Enviamos correo al aspirante
			$q = self::getEmail($idAspirante);
			$data = $q->fetch(PDO::FETCH_ASSOC);
			$emailAspirante = $data['email'];
			$emailAspiranteArray = array();
			array_push($emailAspiranteArray, $emailAspirante);
				
		
			$greeting = "Estimado Aspirante: " ;
			$message =  " \n  Tu cuenta de acceso ha sido activada esperamos que pueda ingresar al SITRABS ";
			$subject = " SITRABS - Activacion de Cuenta  ";
			$resEnvioToEmpleador = sentEmail ( $greeting, $message, $subject, $emailAspiranteArray );
			
			$greeting = "Estimado Administrador: " ;
			$message =  " \n  Un nuevo Aspirante ha sido activado en SITRABS ";
			$subject = " SITRABS - Activacion de Cuenta ";
			$resEnvioToEmpleador = sentEmail ( $greeting, $message, $subject, $admonEmail );
			// Y ahora solo activamos las aplicaciones que pudiera tener el apsirante
			
			OfertaDTO::cambiarOfertaAplicaAspirante('Activa',$idAspirante);
			Database::disconnect ();
			return true;
		}
	
		
	}	
	public static function actualizarUrlCV($idAspirante, $urlCV) {
		$query = "UPDATE  tbl_aspirante set url_cv = ? where id_aspirante = ? ";
		$con = Database::connect ();
		$stmt = $con->prepare ( $query );
		
		$stmt->bindParam ( 1, $urlCV );
		$stmt->bindParam ( 2, $idAspirante );
		$stmt->execute ();
		
		Database::disconnect ();
	}
	public static function getUrlCV($idAspirante) {
		$pdo = Database::connect ();
		$pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
		$sql = "SELECT url_cv FROM tbl_aspirante where id_aspirante = ?";
		$q = $pdo->prepare ( $sql );
		$q->execute ( array (
				$idAspirante 
		) );
		$num = $q->rowCount ();
		if ($num > 0) {
			$data = $q->fetch ( PDO::FETCH_ASSOC );
			$urlCV = $data ['url_cv'];
			Database::disconnect ();
			if ($urlCV != null) {
				return $urlCV;
			} else {
				return null;
			}
		}
	}
}
?>